from fbt.version import get_fast_git_version_id


Import("env")

env.Append(
    CPPPATH=[
        "#/lib/toolbox",
    ],
    LINT_SOURCES=[
        Dir("."),
    ],
    SDK_HEADERS=[
        File("api_lock.h"),
        File("compress.h"),
        File("manchester_decoder.h"),
        File("manchester_encoder.h"),
        File("path.h"),
        File("name_generator.h"),
        File("crc32_calc.h"),
        File("dir_walk.h"),
        File("args.h"),
        File("saved_struct.h"),
        File("version.h"),
        File("float_tools.h"),
        File("value_index.h"),
        File("tar/tar_archive.h"),
        File("stream/stream.h"),
        File("stream/file_stream.h"),
        File("stream/string_stream.h"),
        File("stream/buffered_file_stream.h"),
        File("protocols/protocol_dict.h"),
        File("pretty_format.h"),
        File("hex.h"),
        File("simple_array.h"),
        File("bit_buffer.h"),
        File("keys_dict.h"),
    ],
)


libenv = env.Clone(tools=["fbt_version"], FW_LIB_NAME="toolbox")
libenv.ApplyLibFlags()


# Git Version management
version_depends = []
version_id_data = get_fast_git_version_id()
if version_id_data:
    version_depends = Value(version_id_data)

# Only invoke version generator if preliminary check target (version_depends) has changed
build_version = libenv.VersionBuilder(
    Dir("."),
    version_depends,
)

fw_version_json = libenv.InstallAs(
    "${BUILD_DIR}/${FIRMWARE_BUILD_CFG}.json", "version.json"
)
Alias("version_json", fw_version_json)
env.Append(FW_VERSION_JSON=fw_version_json)

# Default(fw_version_json)


if not version_depends:
    libenv.Precious(build_version)
    libenv.AlwaysBuild(build_version)

sources = libenv.GlobRecursive("*.c")

libenv.Append(CPPPATH=[libenv.Dir(".")])

lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources)
libenv.Install("${LIB_DIST_DIR}", lib)
Return("lib")
